package task

import "sync"

/**
	全局维护一个任务队列
 */
type TaskerQueueManager struct {
	TaskQueue map[string]*UnitTask
	Lock *sync.Mutex
}
var QueueManager = &TaskerQueueManager{make(map[string]*UnitTask,0),new(sync.Mutex)}

/**
	向任务队列中注册任务
 */
func (v *TaskerQueueManager) RegistTask(task *UnitTask){
	v.Lock.Lock()
	v.TaskQueue[task.task.TaskName]=task
	defer v.Lock.Unlock()
}
/**
	执行带有定时逻辑的某个任务
 */
func (v *TaskerQueueManager) ExcuseCronTask(taskName string) {
	v.Lock.Lock()
	task := v.TaskQueue[taskName]
	if task!= nil {
		go task.cronRun()
	}
	defer v.Lock.Unlock()
}

/**
	执行一个需要人工触发的定时任务
	只要能查询出数据，就会一直执行下去。除非查询出0条
 */
func (v *TaskerQueueManager) ExcuseWaitTask(taskName string) {
	v.Lock.Lock()
	task := v.TaskQueue[taskName]
	if task != nil {
		go func(){
			for {
				size := task.waitRun()
				if size == 0 {
					break
				}
			}
		}()
	}
	defer v.Lock.Unlock()
}
/**
	停止一个任务
 */
func (v *TaskerQueueManager) StopTask(taskName string){
	v.Lock.Lock()
	task := v.TaskQueue[taskName]
	if task != nil {
		task.Pause =true
	}
	defer v.Lock.Unlock()
}
/**
	恢复一个任务
 */
func  (v *TaskerQueueManager)  StartTask(taskName string) {
	v.Lock.Lock()
	task := v.TaskQueue[taskName]
	if task != nil {
		task.Pause =false
	}
	defer v.Lock.Unlock()
}
